package com.aviatorscript.aviatorscript.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 转换规则主表实体类
 * 用于存储数据转换规则的基本信息
 */
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("transform_rule")
public class TransformRule {

    /**
     * 主键ID - 自增长
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 规则编码 - 唯一标识，用于接口调用
     */
    @TableField("rule_code")
    private String ruleCode;

    /**
     * 规则名称 - 便于管理和识别
     */
    @TableField("rule_name")
    private String ruleName;

    /**
     * 源类型完整类名 - 例如：com.example.dto.UserDTO
     */
    @TableField("source_type")
    private String sourceType;

    /**
     * 目标类型完整类名 - 例如：com.example.entity.User
     */
    @TableField("target_type")
    private String targetType;

    /**
     * 规则描述信息
     */
    @TableField("description")
    private String description;

    /**
     * 是否启用标志 - 1:启用，0:禁用
     */
    @TableField("enabled")
    private Boolean enabled;

    /**
     * 编译状态 - 1:已编译，0:未编译（用于AviatorScript脚本编译缓存）
     */
    @TableField("compile_status")
    private Boolean compileStatus;

    /**
     * 版本号 - 用于缓存版本控制，规则更新时递增
     */
    @TableField("version")
    private Integer version;

    /**
     * 执行次数统计 - 用于监控规则使用情况
     */
    @TableField("execute_count")
    private Long executeCount;

    /**
     * 最后执行时间 - 记录规则最近一次被使用的时间
     */
    @TableField("last_execute_time")
    private LocalDateTime lastExecuteTime;

    /**
     * 创建时间 - 自动填充
     */
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新时间 - 自动填充
     */
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 创建者
     */
    @TableField("creator")
    private String creator;

    /**
     * 更新者
     */
    @TableField("updater")
    private String updater;

    /**
     * 字段映射规则列表 - 不存储在数据库中，用于业务逻辑
     */
    @TableField(exist = false)
    private List<FieldMappingRule> fieldMappingRules;
} 